﻿//-----------------------------------------------------------------------
// <copyright file="HrmSystemDbContext.cs" company="WpfDevelopment.com">
//     Copyright WpfDevelopment.com. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace Hrmsystem.Data
{
    using System;
    using System.Data.Entity;
    using Hrmsystem.Domain;

    /// <summary>
    /// The database context to store the data into for this hrm system
    /// </summary>
    public class HrmsystemDBContext : DbContext
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="HrmsystemDBContext"/> class.
        /// </summary>
        public HrmsystemDBContext()
            : base("HrmSystemDb")
        {
        }

        /// <summary>
        /// This method is called when the model for a derived context has been initialized, but
        /// before the model has been locked down and used to initialize the context.  The default
        /// implementation of this method does nothing, but it can be overridden in a derived class
        /// such that the model can be further configured before it is locked down.
        /// </summary>
        /// <param name="modelBuilder">The builder that defines the model for the context being created.</param>
        /// <remarks>
        /// Typically, this method is called only once when the first instance of a derived context
        /// is created.  The model for that context is then cached and is for all further instances of
        /// the context in the app domain.  This caching can be disabled by setting the ModelCaching
        /// property on the given ModelBuidler, but note that this can seriously degrade performance.
        /// More control over caching is provided through use of the DbModelBuilder and DbContextFactory
        /// classes directly.
        /// </remarks>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            if (modelBuilder == null)
            {
                throw new ArgumentNullException("modelBuilder");
            }

            modelBuilder.Entity<Person>()
                .HasKey(x => x.Id)
                .ToTable("People");

            modelBuilder.Entity<Employee>()
                .ToTable("Employees");

            modelBuilder.Entity<Contract>()
                .HasKey(x => x.Id);

            base.OnModelCreating(modelBuilder);
        }
    }
}
